﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.Linq;



namespace szybkie_awarie
{
    public partial class Okno : Form

    {
       
        readonly MySqlConnection _polaczenie = new MySqlConnection("server=localhost; user id=Csharp; password=wodospad; database=awaria; pooling=false;");
        bool _blokada;
        readonly string [] _cache = new string[4];
        private int _liczba;
        
        public Okno()
        {
            InitializeComponent();
           
        }
                
        private void ButtonOdsClick(object sender, EventArgs e)
        {
          Odswiez();
        }

        bool Sprawdz( int indeks , TextBox etykieta)
        {
            return _cache[indeks] != etykieta.Text;
        }

        void Odswiez()
        {
            _blokada = true;
            var db = new AwAria(_polaczenie);
            if (db.DatabaseExists())
            {
                listBox.SuspendLayout();

                var wybrane = listBox.SelectedItem;

                _polaczenie.Open();

                var zgloszenia = from id in db.ListA
                                 select id.ID + " " + id.Nazwa + " " + id.AdReS + " " + id.Telefon;
                _polaczenie.Close();
                

                listBox.DataSource = listBox.DataSource = zgloszenia.ToList();
                if (zgloszenia.Count() > _liczba)
                {
                notifyIcon1.BalloonTipText = @"Dodano złoszenie";
                notifyIcon1.BalloonTipTitle = @"Nowe zgłoszenie";
                notifyIcon1.ShowBalloonTip(10);
                }
                if (zgloszenia.Count() < _liczba)
                {
                    notifyIcon1.BalloonTipText = @"Usunięto złoszenie";
                    notifyIcon1.BalloonTipTitle =@"Zgłoszenie pobrane";
                    notifyIcon1.ShowBalloonTip(10);
                }
                _liczba = zgloszenia.Count();
                //listBox1.Refresh();
                if (wybrane!= null)
                if (listBox.FindString(wybrane.ToString())>=0)
                listBox.SelectedItem = wybrane;
                listBox.ResumeLayout();
                _blokada = false;

                // tu skończyłem!
            }
            else

                MessageBox.Show(@"Nie moge połączyć z bazą", @"Kurde",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error); 
        }

        private void ListBox1SelectedIndexChanged(object sender, EventArgs e)
        {

            if (!_blokada)
            {
                var db = new AwAria(_polaczenie);
                if (listBox.SelectedItems.Count != 0)
                    if (db.DatabaseExists())
                    {
                        var numer =
                            Convert.ToInt32(listBox.SelectedItem.ToString().Substring(0,
                                                                                       listBox.SelectedItem.ToString().
                                                                                           IndexOf(' ')));
                        _polaczenie.Open();
                        List<ListA> query =
                            (from ab in db.ListA
                             where ab.ID == numer
                             select ab).ToList();
                        _polaczenie.Close();
                        if (query.Count > 0)
                        {
                            textBoxImie.Text =_cache[0]= query.First().Nazwa;
                            textBoxOpisw.Text = _cache[1] = query.First().Opis;
                            textBoxTelefon.Text = _cache[2] = query.First().Telefon;
                            textBoxAdres.Text = _cache[3] = query.First().AdReS;
                            textBoxData_z.Text = query.First().DataZGLosZenIA.ToString();
                            textBoxData_mo.Text = query.First().DataModYFIKAcJI.ToString();
                        }
                    }
                    else
                        MessageBox.Show(@"Nie moge połączyć z bazą", @"Kurde",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);

            }

        }

        private void Button1Click(object sender, EventArgs e)
        {
            
            var db = new AwAria(_polaczenie);
              if(listBox.SelectedItems.Count!=0)
                  if (db.DatabaseExists())
                  
              {
                  _polaczenie.Open();


                  var dane = new ListA
                                              {
                                                 
                                                  Nazwa = textBoxImie.Text,
                                                  Telefon = textBoxTelefon.Text,
                                                  AdReS = textBoxAdres.Text,
                                                  Opis = textBoxOpisw.Text,
                                                  DataModYFIKAcJI = DateTime.UtcNow,
                                                  DataZGLosZenIA = DateTime.UtcNow
                                              };
                     db.ListA.InsertOnSubmit(dane);      
                    db.SubmitChanges();
                  _polaczenie.Close();
                      Odswiez();

              }
                  else
                      MessageBox.Show(@"Nie moge połączyć z bazą", @"Kurde",
                      MessageBoxButtons.OK,
                      MessageBoxIcon.Error);

        }

        private void ButtonZapiszClick(object sender, EventArgs e)
        {

            var db = new AwAria(_polaczenie);
            
                if (db.DatabaseExists())
                {

                    if (listBox.SelectedItems.Count != 0)
                    {
                        var numer =
                            Convert.ToInt32(listBox.SelectedItem.ToString().Substring(0,
                                                                                      listBox.SelectedItem.ToString().
                                                                                          IndexOf(' ')));
                        _polaczenie.Open();

                        //update

                        List<ListA> query =
                            (from ab in db.ListA
                             where ab.ID == numer
                             select ab).ToList();
                        var update = (from p in db.ListA
                                      where p.ID == numer
                                      select p).First();
                        if (Sprawdz(0, textBoxImie))
                            if (query.First().Nazwa == _cache[0])
                                update.Nazwa = textBoxImie.Text;
                            else if (MessageBox.Show(
                                string.Format(
                                    @"Wpis Nazwa został już zmieniony z {0} na {1} przez kogoś innego Czy napewno zastąpić?",
                                    _cache[0], query.First().Nazwa), @"zmiana",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Stop) == DialogResult.Yes)
                                update.Nazwa = textBoxImie.Text;

                        if (Sprawdz(1, textBoxOpisw))
                            if (query.First().Opis == _cache[1])
                                update.Opis = textBoxOpisw.Text;
                            else if (MessageBox.Show(
                                string.Format(
                                    @"Wpis Opis został już zmieniony z {0} na {1} przez kogoś innego Czy napewno zastąpić?",
                                    _cache[1], query.First().Opis), @"zmiana",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Stop) == DialogResult.Yes)
                                update.Opis = textBoxOpisw.Text;

                        if (Sprawdz(2, textBoxTelefon))
                            if (query.First().Telefon == _cache[2])
                                update.Telefon = textBoxTelefon.Text;
                            else if (MessageBox.Show(
                                string.Format(
                                    @"Wpis Telefon został już zmieniony z {0} na {1} przez kogoś innego Czy napewno zastąpić?",
                                    _cache[2], query.First().Telefon), @"zmiana",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Stop) == DialogResult.Yes)
                                update.Telefon = textBoxTelefon.Text;

                        if (Sprawdz(3, textBoxAdres))
                            if (query.First().AdReS == _cache[3])
                                update.AdReS = textBoxAdres.Text;
                            else if (MessageBox.Show(
                                string.Format(
                                    @"Wpis Adres został już zmieniony z {0} na {1} przez kogoś innego Czy napewno zastąpić?",
                                    _cache[3], query.First().AdReS), @"zmiana",
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Stop) == DialogResult.Yes)
                                update.AdReS = textBoxAdres.Text;
                        update.DataModYFIKAcJI = DateTime.UtcNow;

                        db.SubmitChanges();

                        _polaczenie.Close();
                        Odswiez();
                    }
                    else
                    {
                        var dane = new ListA
                        {

                            Nazwa = textBoxImie.Text,
                            Telefon = textBoxTelefon.Text,
                            AdReS = textBoxAdres.Text,
                            Opis = textBoxOpisw.Text,
                            DataModYFIKAcJI = DateTime.UtcNow,
                            DataZGLosZenIA = DateTime.UtcNow
                        };
                        db.ListA.InsertOnSubmit(dane);
                        db.SubmitChanges();
                        _polaczenie.Close();
                        Odswiez();
                    }
                }
                else
                    MessageBox.Show(@"Nie moge połączyć z bazą", @"Kurde",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);


        }

        private void ButtonUsunClick(object sender, EventArgs e)
        {
            var db = new AwAria(_polaczenie);
            if (db.DatabaseExists())
            {
                var numer = Convert.ToInt32(listBox.SelectedItem.ToString().Substring(0, listBox.SelectedItem.ToString().IndexOf(' ')));
                _polaczenie.Open();
                ListA wpis = (from p in db.ListA
                              where p.ID == numer
                                   select p).First();

                db.ListA.DeleteOnSubmit(wpis);
                db.SubmitChanges(ConflictMode.ContinueOnConflict);
                //listBox1.Refresh();
                _polaczenie.Close();
                Odswiez();

                
            }
            else
           MessageBox.Show(@"Nie moge połączyć z bazą", @"Kurde",
           MessageBoxButtons.OK,
           MessageBoxIcon.Error);
        }

        private void ButtonCzyscClick(object sender, EventArgs e)
        {
            listBox.ClearSelected();
            textBoxImie.Clear();
            textBoxOpisw.Clear();
            textBoxTelefon.Clear();
            textBoxAdres.Clear();
            textBoxData_z.Text = DateTime.UtcNow.ToString();
            textBoxData_mo.Text = DateTime.UtcNow.ToString();
        }

        private void Timer1Tick(object sender, EventArgs e)
        {
            Odswiez();
        }

        }




        
    
}
